package collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * 集合的遍历
 * 遍历集合：向着某条搜索路线，对数据集合中的每一个元素做一次且仅做一次访问，访问时所做的操作依赖于具体的应用问题
 *         并不是所有的集合都有下标，而集合又需要统一的操作来获取单个元素，因此诞生了迭代器（iterator）
 * Collection接口提供了统一的遍历集合的方式：迭代器模式，通过当前集合iterator()可以获取一个用于遍历当前集合
 * 元素的迭代器(Iterator接口)
 * java.util.Iterator接口：定义了迭代器遍历集合的相关操作，不同的集合都实现了用于遍历自身元素的迭代器的实现类
 * 迭代器遍历集合步骤：问、取、删，其中删并不是必要条件*/
public class IteratorDemo {
    public static void main(String[] args) {
        Collection c = new ArrayList();
        c.add("one");
        c.add("#");
        c.add("two");
        c.add("#");
        c.add("three");
        c.add("#");
        c.add("four");
        c.add("#");
        c.add("five");
        System.out.println(c);

        //增强for循环也可以实现集合遍历,在底层套用了迭代器模式
        for (Object o :c){
            String str = (String) o;
            System.out.println(str);
        }

        Iterator it =c.iterator(); //获取到遍历当前集合的迭代器
        /**
         * 迭代器常用方法
         * 1.boolean hasNext(); ------问
         *功能：询问集合是否存在下一个元素可以迭代
         * 注意：迭代器指针默认开始位置在集合第一个元素之前
         * 2.E next(); ------取
         * 功能：迭代器指针向后移动一个位置，并获取到这个位置对应的数据
         *3.void remove(); ------删
         * 功能：删除对应元素
         *  */

       while (it.hasNext()){
           String str = (String) it.next(); //获取下一个元素

           if("#".equals(str)){
              // c.remove(str); //迭代器在遍历过程中，是不允许通过集合的方式去增删元素的
               it.remove(); //通过迭代器的方法，可以实现删除对应元素
           }
       }
        System.out.println(c);
    }
}
